// 导入http模块
import http from 'wechat-http'
// 配置基地址
http.baseURL = 'https://live-api.itheima.net'
// 请求拦截器
http.intercept.request = (config) => {
  // 请求返回的相关数据
  console.log(config);
  // 获取token
  const token = getApp().token
  // 统一添加请求头Authorization(后端要求)
  // token存在,并且当前调用的接口不是刷新token接口时产生的,
  // 才加上请求Authorization = token
  if (token && !config.url.includes('/refreshToken')) {
    // 到保存token前提处理,没有此属性时,"."会出现问题
    // 有就是他本身,没有给他赋以空对象
    config.header = config.header || {}
    // token存在,保存到请求头中,没有不保存
    config.header.Authorization = token
  }
  return config
}
// 响应拦截器
http.intercept.response = async (res) => {
  // 判断接口返回来的状态码 如果是401,代表token失效
  if (res.statusCode === 401) {
    // 如果刷新token接口返回401(或者长时间不登录),refreshToken也会失效,这时需要返回登录页面,从新登陆
    if (res.config.url.includes('/refreshToken')) {
      // 获取页面的全部路由(历史)
      const pageStack = getCurrentPages()
      // 获取当前页面的路由地址
      const currentPage = pageStack[pageStack.length - 1]
      // console.log(currentPage);
      // 跳转登录页面
      wx.redirectTo({
        url: `/pages/login/index?returnUrl=/${currentPage.route}`
      })
      return res.data
    }
    // 调用刷新token接口,并以请求头的方式将refreshToken传递给后端
    const { code, data } = await wx.http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: getApp().refreshToken
      }
    })
    if (code !== 10000) return wx.utils.toast()
    // 更新之后从新存入本地
    getApp().setToken(data.token, data.refreshToken)
    // console.log(data);
    // 从新调用401的接口,返回最新的数据
    const result = await wx.http({
      ...res.config
    })
    return result
  }
  // 解套,筛选数据
  return res.data
}
// 挂载到全局
wx.http = http
// 导出
export default http